package ru.ya.kolemik.servcmd;

import java.util.Calendar;
import java.util.Formatter;

import javax.servlet.http.HttpServletRequest;

public class Utils {
    
    /**
     * берёт команду вида "list/page/2" и делит её на две части по первому
     * слэшу. Выдаёт результат в виде массива из двух строк:
     * String [] {"list", "page/2"}
     * 
     * @param command - "list/page/2"
     * @return - String [] {"list", "page/2"}
     */
    public static String[] processCommand(String command) {
        String result = null;
        int position = command.indexOf('/');
        if (position == -1) {
            result = command;
            command = null;
        } else {
            result = command.substring(0, position);
            command = command.substring(position + 1);
        }
        return new String[] { result, command };
    }
    
    /**
     * Возвращает команду как указано в запросе: "list/page/2"
     * 
     * @param request
     * @return - null или команда
     */
    public static String getCommand(HttpServletRequest request) {
        
        
        String commandIncl = null;
        String commandForw = null;
        String commandReq = null;
        
        String command = null;
        String context = request.getContextPath();
        
        // Берём команду из реквеста (по двум или же трём параметрам. Возможно
        // тут уже стоит работать с контекстом и прописать в нём тип запроса
        // (INCLUDE, FORWARD, REQUEST)
        commandIncl = (String) request
                .getAttribute("javax.servlet.include.request_uri");

        commandForw = (String) request
                .getAttribute("javax.servlet.forward.request_uri");
        
        commandReq = (String) request.getRequestURI();
        
        System.out.println("Inc, Forw, Req = " + commandIncl + ", " + commandForw + ", " + commandReq);
        
        if (commandIncl == null) {
            // FORWARD
            command = commandForw.substring(context.length() + 1);
        } else if (commandForw == null) {
            // INCLUDE
            String commandAtt = commandIncl.substring(context.length() + 1 + 5);
            commandReq = commandReq.substring(context.length() + 1);
            if (commandAtt != null && commandAtt.startsWith("cont")) {
                command = commandReq;
            } else {
                command = commandAtt;
            }
        }
        
        // Теперь команда получена из реквеста - надо обрезать contextPath
        // Ситуация такая:
        // command == /App/list/page/2
        // context == /App
//        String context = request.getContextPath();
        // +1 надо чтобы обрезать первый слэш
//        commandAtt = commandAtt.substring(context.length() + 1 + 5);
//        commandReq = commandReq.substring(context.length() + 1);
//        
//        String command = commandAtt;
        
//        if (commandAtt != null && commandAtt.startsWith("cont")) {
//            command = commandReq;
//        } else {
//            command = commandAtt;
//        }
        
        if (command.length() == 0) {
            return null;
        } else {
            return command;
        }
    }
    
    public static void main(String[] args) {
        Formatter fmt = new Formatter();
        Calendar cal = Calendar.getInstance();

        fmt.format("%1$td-%1$tm-%1$tY %1$tH:%1$tM:%1$tS", cal);
        String date = fmt.toString();
        System.out.println(date);
    }
}
